﻿// using System;
// using System.Buffers;
// using System.Text;
// using SuperSocket.ProtoBase;
//
// namespace Demo005
// {
//     public   class ModbusPackageDecoder:IPackageDecoder< ModbusPackageInfo>
//     {  
//         public Encoding Encoding { get; private set; }
//
//         public ModbusPackageDecoder()
//             : this(new UTF8Encoding(false))
//         {
//
//         }
//
//         public ModbusPackageDecoder(Encoding encoding)
//         {
//             Encoding = encoding;
//         }
//         
//         
//         public ModbusPackageInfo Decode(ref ReadOnlySequence<byte> buffer, object context)
//         {
//             
//                 //验证包体长度
//                 
//             
//             
//                 var reader = new SequenceReader<byte>(buffer);
//                 
//                 
//                 Console.WriteLine($"Decode--{string.Join(" ",buffer.ToArray()) }");
//                
//  
//                 var len_buffer = reader.Sequence.Slice(4, 2);
//                 var lenreader=new SequenceReader<byte>( len_buffer);
//                 lenreader.TryReadBigEndian(out short len);
//
//
//                 var len_body = reader.Sequence.Slice(reader.Length - len);
//
//                 if (len != len_body.Length)
//                 {
//                     //reader.AdvanceToEnd();
//                     // reader.Advance(len_body.Length);
//                     return new ModbusPackageInfo();
//                 }
//                 else
//                 {
//                     reader.TryPeek(7, out byte funcode);
//
//             
//                     var content= buffer.ToArray();
//              
//
//                     return new ModbusPackageInfo()
//                     {
//                         Key = funcode, Body = content
//                     };
//                 }
//
//                  
//               
//             }
//
//            
//
//
//  
//     }
// }